package com.hxb.library.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;


/**
 * @Author :hexingbo
 * @Date :2019/4/22
 * @FileName： NumberF
 * @Describe : 数据格式化
 */
public class NumberFormatUtil {
    public static String moneyLab = "¥";
    /**
     * 格式化：科学计数法
     */
    private static DecimalFormat df_science = new DecimalFormat(",###,##0.00");

    /**
     * 字符串转小数
     *
     * @param s
     * @return 0.0
     */
    public static double string2double(String s) {
        if (HxbUtils.isEmpty(s)) {
            s = "0.00";
        } else {
            s = s.replaceAll(",", "");
        }
        return Double.valueOf(s);
    }

    /**
     * 字符串转整数
     *
     * @param s
     * @return 0
     */
    public static int string2Int(String s) {
        if (HxbUtils.isEmpty(s)) {
            s = "0";
        } else {
            s = s.replaceAll(",", "");
        }
        return Integer.valueOf(s);
    }

    /**
     * 数据科学计数法显示
     *
     * @param d
     * @return , ###, ##0.00
     */
    public static String numberFormat(double d) {
        return df_science.format(d);
    }

    /**
     * 数据科学计数法显示
     *
     * @param d
     * @return , ###, ##0.00
     */
    public static String numberFormat(String d) {
        return df_science.format(string2double(d));
    }

    /**
     * 格式化：金额显示：￥###, ##0.00
     *
     * @param d
     * @return
     */
    public static String moneyFormat(double d) {
        return moneyLab + numberFormat(d);
    }

    /**
     * 格式化位两位小数展示
     *
     * @param d
     * @return ####, ##0.00
     */
    public static String moneyFormat(String d) {
        return moneyLab + numberFormat(d);
    }

    /**
     * @param numberDigits 数据需要显示的小数位数：如：1.00，则numberDigits=2
     * @param number       需要被格式化的数据
     * @return
     */
    public static String getNumberFormat(int numberDigits, String number) {
        String value = number == null || number.equals("") || number.length() == 0 ? "0" : number;
        value = value.replaceAll(",", "");
        DecimalFormat df;
        switch (numberDigits) {
            case 0:
                df = new DecimalFormat("#0");
                break;
            case 1:
                df = new DecimalFormat("#0.0");
                break;
            case 2:
                df = new DecimalFormat("#0.00");
                break;
            case 3:
                df = new DecimalFormat("#0.000");
                break;
            case 4:
                df = new DecimalFormat("#0.0000");
                break;
            default:
                df = new DecimalFormat("#0.00");
                break;
        }
        return df.format(new BigDecimal(value));
    }
}
